package com.zh.note.leetcode.string;

import java.util.ArrayList;
import java.util.List;

/**
 * 题目：N 字形变换
 * <p>
 * 将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行 Z 字形排列。
 * <p>
 * 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时，排列如下：
 * <p>
 * P   A   H   N
 * A P L S I I G
 * Y   I   R
 */
public class Nconvert {

    public static String convert(String s, int numRows) {
        if (numRows == 1) {
            return s;
        }

        List<StringBuilder> list = new ArrayList<>(3);
        for (int i = 0; i < numRows; i++) {
            list.add(new StringBuilder());
        }
        int i = 0;
        int flag = -1;
        for (char c : s.toCharArray()) {
            list.get(i).append(c);
            if (i == 0 || i == numRows - 1) {
                flag = -flag;
            }
            i = i + flag;
        }
        return list.stream().map(item -> item.toString()).reduce("", (total, next) -> total + next);
    }

    public static void main(String[] args) {
        // String str = "PAYPALISHIRING";
        String str = "AB";
        System.out.println(convert(str, 1));
    }
}
